import json
import re
import requests

class PositionRecommand:
    def __init__(self, resume):
        self.message = []
        self.resume = resume
        self.url = "https://api.siliconflow.cn/v1/chat/completions"
        self.payload = {
            "model": "Qwen/Qwen3-14B",
            "messages": self.message,
            "stream": False,
            "max_tokens": 4000,
            "min_p": 0.05,
            "stop": None,
            "temperature": 0.7,
            "top_p": 0.7,
            "top_k": 50,
            "frequency_penalty": 0.5,
            "n": 1,
            "response_format": {"type": "text"}
        }
        self.headers = {
            "Authorization": "Bearer sk-dgxjhtoohyyxvjzoouixerefxbwvwrtnenkejpkoxntxhiyg",
            "Content-Type": "application/json"
        }

    def recommand_position(self):
        self.message.append({
            "role": "user",
            "content": (
                f"你是一个经验丰富的计算机领域的岗位推荐师，面试者的简历如下：{self.resume}"
                f"根据面试者的简历，推荐以下16个岗位中的一个，'软件开发-前端开发方向'、'软件开发-后端开发方向'、软件开发-客户端开发方向'、'软件开发-测试开发方向'、"
                f"''人工智能-深度学习方向'、'人工智能-计算机视觉方向'、'人工智能-自然语言处理方向'、'人工智能-算法工程师方向'、"
                f"'大数据-大数据开发方向'、'大数据-大数据分析方向'、'大数据-数据挖掘方向'、'大数据-大数据可视化方向'"
                f"'物联网-嵌入式开发方向'、'物联网-物联网平台开发方向'、'物联网-无线通信方向'、'物联网-边缘计算方向'"
                f'返回示例为：{{"position": "软件开发-后端开发方向"}}'
            )
        })
        response = requests.request("POST", self.url, json=self.payload, headers=self.headers)
        # print("回答评分原始数据：", response.text)
        # 解析JSON并提取content和code
        full_response = json.loads(response.text)
        # Step 2: 提取 content 字符串
        content = full_response["choices"][0]["message"]["content"]
        # Step 3: 从 content 中提取嵌套的 JSON 分数字符串（注意它是字符串，不是对象）
        match = re.search(r"\{.*?\}", content, re.DOTALL)
        position_json_str = match.group(0)
        # Step 4: 将嵌套的 JSON 字符串解析为 Python 字典
        position_recommand_data = json.loads(position_json_str)
        print(position_recommand_data)
        return position_recommand_data.get("position")

if __name__ == "__main__":
    postionRecommand = PositionRecommand('{  "basic_info": {    "name": "张杰",    "age": "27",    "tel": "18534552870",    "email": "sherioc@qq.com",    "intention_position": "",    "intention_city": ""  },  "education_experience_list": [    {      "school": "武汉理工大学",      "major": "计算机与人工智能学院 | 人工智能",      "courses": "数据结构与算法，人工智能导论，机器学习与数据挖掘，数字图像处理，计算机视觉，自然语言处理，深度学习",      "scholarship": "2022-2023年校三等奖学金 绩点XX/5",      "time": "2022.09-2026.06"    }  ],  "technology_stack": {    "main_stack": "掌握 JavaSE，熟悉 SpringBoot、SSM 框架、MySQL、MyBatis；遵循阿里规范",    "appendix_stack": "了解 JavaScript 和 Vue 框架；能够进行数据表与接口设计；能使用 Python 进行 Numpy、Pandas 数据分析、Seaborn、PyEcharts 数据可视化"  },  "project_expericenc_list": [    {      "project_name": "CSGO 世界杯",      "projcet_schedule": {        "from": "2022.9",        "to": "2025.6"      },      "project_role": "队长",      "project_contribution": "描述你参与过的项目及你在项目过程中所作的工作，内容简洁清晰，突出于求职岗位匹配的重点。具体可以从以下几个方面入手：1、项目内容 2、工作内容 3、项目成果。"    }  ],  "self_evaluation": "篇幅不要太长，注意结合简历整体的美观度，内容中应总结经验和特长，突出符合求职岗位职位描述的特点，避免使用过多形容词。例：拥有良好的沟通和协调能力，善于应变，能够快速适应新环境，熟悉使用办公软件，对文件管理十分熟悉。"}')
    postionRecommand.recommand_position()